package cn.yrec.rain.analysis.controller;

import cn.yrec.rain.analysis.domain.ResponseData;
import cn.yrec.rain.analysis.service.AnalysisService;
import cn.yrec.rain.analysis.vo.FindRainRequestParam;
import cn.yrec.rain.analysis.vo.RainfallResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 描述:
 *  降雨分析模块,主要提供如下接口功能
 *      1. 寻找场次雨
 *      2. 根据原形雨寻找相似雨
 * @createDate: 2023/03/25 11:14
 * @author: yanglichen
 */
@RestController
@RequestMapping("/analyse")
public class RainAnalyseController {

    @Autowired
    private AnalysisService analysisService;

    /**
     * 方法描述: 根据请求参数找到场次雨
     * @author yanglichen
     * @date 2023-03-30 22:43
     * @param requestParam 请求参数
     * @return 场次雨列表
     **/
    @PostMapping("/findRain")
    public ResponseData findRain(@RequestBody FindRainRequestParam requestParam) {
        return ResponseData.ok(analysisService.findRain(requestParam));
    }

    /**
     * 方法描述: 根据请求参数找到场次雨
     * @author yanglichen
     * @date 2023-03-30 22:43
     * @param requestParam 请求参数
     * @return 场次雨列表
     */
    @PostMapping("/findRainByBasinName")
    public ResponseData findRainByBasinName(@RequestBody FindRainRequestParam requestParam) {
        return ResponseData.ok(analysisService.findRainByBasinName(requestParam));
    }

    /**
     * 方法描述: 执行相似性分析
     * @author yanglichen
     * @date 2023-04-03 11:12
     * @param requestParam 请求参数
     * @return 相似降雨
     **/
    @PostMapping("/conformAnalysis")
    public ResponseData conformAnalysis(@RequestBody RainfallResult requestParam) {
        return ResponseData.ok(analysisService.conformAnalysis(requestParam));
    }


    /**
     * 方法描述: 通过开始时间和结束时间，站码列表，降雨阈值，判断这些站码列表中，那些是有数据的数据
     * @author yanglichen
     * @date 2023-08-21 10:25
     * @param param 请求参数
     * @return 有降雨的雨量站的数据
     **/
    @PostMapping("/judgeRain")
    public ResponseData judgeRain(@RequestBody FindRainRequestParam param) {
        return ResponseData.ok(analysisService.judgeRain(param));
    }

}
